home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
IRIX Base Documentation 1998 November
/
IRIX 6.5.2 Base Documentation November 1998.img
/
usr
/
share
/
catman
/
u_man
/
cat3
/
Tcl
/
upvar.z
/
upvar
Wrap
Text File
|
1998-10-30
|
4KB
|
67 lines
uuuuppppvvvvaaaarrrr((((3333TTTTccccllll)))) uuuuppppvvvvaaaarrrr((((3333TTTTccccllll))))
NNNNAAAAMMMMEEEE
upvar - Create link to variable in a different stack frame
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
uuuuppppvvvvaaaarrrr ?_l_e_v_e_l? _o_t_h_e_r_V_a_r _m_y_V_a_r ?_o_t_h_e_r_V_a_r _m_y_V_a_r ...?
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
This command arranges for one or more local variables in the current
procedure to refer to variables in an enclosing procedure call or to
global variables. _L_e_v_e_l may have any of the forms permitted for the
uuuupppplllleeeevvvveeeellll command, and may be omitted if the first letter of the first
_o_t_h_e_r_V_a_r isn't #### or a digit (it defaults to 1111). For each _o_t_h_e_r_V_a_r
argument, uuuuppppvvvvaaaarrrr makes the variable by that name in the procedure frame
given by _l_e_v_e_l (or at global level, if _l_e_v_e_l is ####0000) accessible in the
current procedure by the name given in the corresponding _m_y_V_a_r argument.
The variable named by _o_t_h_e_r_V_a_r need not exist at the time of the call;
it will be created the first time _m_y_V_a_r is referenced, just like an
ordinary variable. _M_y_V_a_r may not refer to an element of an array, but |
_o_t_h_e_r_V_a_r may refer to an array element. UUUUppppvvvvaaaarrrr returns an empty string.
The uuuuppppvvvvaaaarrrr command simplifies the implementation of call-by-name procedure
calling and also makes it easier to build new control constructs as Tcl
procedures. For example, consider the following procedure:
pppprrrroooocccc aaaadddddddd2222 nnnnaaaammmmeeee {{{{
uuuuppppvvvvaaaarrrr $$$$nnnnaaaammmmeeee xxxx
sssseeeetttt xxxx [[[[eeeexxxxpppprrrr $$$$xxxx++++2222]]]]
}}}}
AAAAdddddddd2222 is invoked with an argument giving the name of a variable, and it
adds two to the value of that variable. Although aaaadddddddd2222 could have been
implemented using uuuupppplllleeeevvvveeeellll instead of uuuuppppvvvvaaaarrrr, uuuuppppvvvvaaaarrrr makes it simpler for
aaaadddddddd2222 to access the variable in the caller's procedure frame.
If an upvar variable is unset (e.g. xxxx in aaaadddddddd2222 above), the uuuunnnnsssseeeetttt operation|
affects the variable it is linked to, not the upvar variable. There is |
no way to unset an upvar variable except by exiting the procedure in |
which it is defined. However, it is possible to retarget an upvar |
variable by executing another uuuuppppvvvvaaaarrrr command.
KKKKEEEEYYYYWWWWOOOORRRRDDDDSSSS
context, frame, global, level, procedure, variable
PPPPaaaaggggeeee 1111